/*************************************************************************
 * @file: hedui.h
 * @date: 01/04/2012
 * TOPOL v1_0 - (c)copyright 2012 TEC/UFF
 *************************************************************************
 * This is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 ************************************************************************/

#ifndef _HEDUI
#define _HEDUI

// includes
//----------
#include "hedcontroller.h"

// forward declarations
//----------------------


/*!
 * CLASS
 * HEDUI
 * 
 * This class is responsible to allow the access and manipulation of the
 * Topological Data Structure in a very high level. It can be useful for
 * an access via command line, for example. It provides very simple commands
 * based on geometric operations.
 * 
 * @author Andre Pereira (andremaues@id.uff.br)
 * @version 1.0.0
 * @see XX
 * @see XX
 */
class HEDUI
{

public:

  ////////////////////////////////////////////////
  ///  Constructor and Destructor Declaration  ///
  ////////////////////////////////////////////////

  /**
   * @brief Constructs the object that allows to access and to manipulate
   *        the Topological Data Structure
   */
	HEDUI();

  ////////////////////////////////////
  ///  PUBLIC Methods Declaration  ///
  ////////////////////////////////////

  /**
   * @brief Adds a point in the Model Data Structure, with given coordinates
   * @param _x is the first coordinate of the point
   * @param _y is the second coordinate of the point
   * @param _z is the third coordinate of the point
   */
	void addPoint( double _x, double _y, double _z );

  /**
   * @brief Adds a curve (line) in the Model Data Structure, with given coordinates
   * @param _x1 is the first coordinate of the first point
   * @param _y1 is the second coordinate of the first point
   * @param _z1 is the third coordinate of the first point
   * @param _x2 is the first coordinate of the second point
   * @param _y2 is the second coordinate of the second point
   * @param _z2 is the third coordinate of the second point
   */
	void addCurve( double _x1, double _y1, double _z1,
                 double _x2, double _y2, double _z2 );

  /**
   * @brief Adds a triangle in the Model Data Structure, with given coordinates
   * @param _x1 is the first coordinate of the first point
   * @param _y1 is the second coordinate of the first point
   * @param _z1 is the third coordinate of the first point
   * @param _x2 is the first coordinate of the second point
   * @param _y2 is the second coordinate of the second point
   * @param _z2 is the third coordinate of the second point
   * @param _x3 is the first coordinate of the third point
   * @param _y3 is the second coordinate of the third point
   * @param _z3 is the third coordinate of the third point
   */
	void addTriangle( double _x1, double _y1, double _z1,
                    double _x2, double _y2, double _z2,
                    double _x3, double _y3, double _z3 );

private:

  ////////////////////////////////
  ///  Attributes Declaration  ///
  ////////////////////////////////

  /** @brief Provides interaction with the Data Structure in a lower level */
	HEDController m_controle;

};

#endif
